home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / src / specfunc / cheb_eval.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-11-01  |  690 b   |  35 lines

  1.  
  2. static inline int
  3. cheb_eval_e(const cheb_series * cs,
  4.             const double x,
  5.             gsl_sf_result * result)
  6. {
  7.   int j;
  8.   double d  = 0.0;
  9.   double dd = 0.0;
  10.  
  11.   double y  = (2.0*x - cs->a - cs->b) / (cs->b - cs->a);
  12.   double y2 = 2.0 * y;
  13.  
  14.   double e = 0.0;
  15.  
  16.   for(j = cs->order; j>=1; j--) {
  17.     double temp = d;
  18.     d = y2*d - dd + cs->c[j];
  19.     e += fabs(y2*temp) + fabs(dd) + fabs(cs->c[j]);
  20.     dd = temp;
  21.   }
  22.  
  23.   { 
  24.     double temp = d;
  25.     d = y*d - dd + 0.5 * cs->c[0];
  26.     e += fabs(y*temp) + fabs(dd) + 0.5 * fabs(cs->c[0]);
  27.   }
  28.  
  29.   result->val = d;
  30.   result->err = GSL_DBL_EPSILON * e + fabs(cs->c[cs->order]);
  31.  
  32.   return GSL_SUCCESS;
  33. }
  34.  
  35.